<?php
/*
    OpenLib
    Copyright (C) 2011  Michael Gukov, Pham Thi Thuy Duong

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/


namespace Sun;

abstract class AutoLoader {
    private $dir;
    private static $loaders;

    public static function registerLoader() {
        spl_autoload_register("\\Sun\\AutoLoader::loader");
    }
    public static function addLoader($name, AutoLoader $loader) {
        self::$loaders[$name] = $loader;
    }

    public static function loader($class) {
        foreach (self::$loaders as $loader) {
            if ($loader->Load($class) &&
               (class_exists($class) || interface_exists($class))) return;
        }
        throw new Exceptions\NotFound("Class", $class);
    }

    protected function __construct($name, $dir = null) {
        $this->dir = $dir;
        self::addLoader($name, $this);
    }

    protected function Load($class) {
        $file = $this->dir."/".strtolower($class).".php";
        if (!file_exists($file)) return false;
        include_once $file;
        return true;
    }
}
